home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Utilities / Ph 1.1.1 / PhClient / login.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-08  |  5.5 KB  |  193 lines  |  [TEXT/MPS ]

  1. /*_____________________________________________________________________
  2.  
  3.       login.c - Login Movable Modal Dialog.
  4. _____________________________________________________________________*/
  5.  
  6. #pragma load "precompile"
  7. #include "rez.h"
  8. #include "login.h"
  9. #include "utl.h"
  10. #include "glob.h"
  11. #include "oop.h"
  12. #include "wstm.h"
  13.  
  14. /*_____________________________________________________________________
  15.  
  16.     Global Variables.
  17. _____________________________________________________________________*/
  18.  
  19. static DialogPtr        Window;            /* ptr to dialog window */
  20. static Str255            Pswd;                /* password */
  21. static Rect                PopupRect;        /* rectangle for popup menu */
  22. static short            CurSel;            /* currently selected popup menu item */
  23.  
  24. static oop_Dispatch dispatch = {
  25.                                 login_DoPeriodic,
  26.                                 oop_DoClick,
  27.                                 login_DoKey,
  28.                                 oop_DoUpdate,
  29.                                 oop_DoActivate,
  30.                                 oop_DoDeactivate,
  31.                                 oop_DoGrow,
  32.                                 oop_DoZoom,
  33.                                 oop_DoClose,
  34.                                 login_DoCommand
  35.                             };
  36.  
  37. /*_____________________________________________________________________
  38.  
  39.     login_DoPeriodic - Do Periodic Tasks.
  40.     
  41.     Entry:    w = pointer to window record.
  42. _____________________________________________________________________*/
  43.  
  44. void login_DoPeriodic (WindowPtr w)
  45.  
  46. {
  47.     oop_DoPeriodic(w);
  48.     if (utl_GetDialogEditFieldNum(w) == loginPswdField)
  49.         glob_CheckPswdSel(w);
  50. }
  51.  
  52. /*_____________________________________________________________________
  53.  
  54.     login_DoKey - Process a Key Down Event.
  55.     
  56.     Entry:    w = pointer to window record.
  57.                 key = ascii code of key.
  58.                 modifiers = modifiers from event record.
  59. _____________________________________________________________________*/
  60.  
  61. void login_DoKey (WindowPtr w, char key, short modifiers)
  62.  
  63. {
  64.     if (utl_GetDialogEditFieldNum(w) == loginPswdField) {
  65.         if (!glob_FilterPswdChar(w, key, modifiers, Pswd)) return;
  66.     } else {
  67.         if (!glob_FilterAsciiChar(w, key, modifiers)) return;
  68.     }
  69.     oop_DoKey(w, key, modifiers);
  70. }
  71.  
  72. /*_____________________________________________________________________
  73.  
  74.     login_DoCommand - Process a Command.
  75.     
  76.     Entry:    w = pointer to window record.
  77.                 theMenu = menu index.
  78.                 theItem = item index.
  79.                 
  80.     Exit:        function result = true if command handled.
  81. _____________________________________________________________________*/
  82.  
  83. Boolean login_DoCommand (WindowPtr w, short theMenu, short theItem)
  84.  
  85. {
  86.     if (theMenu == editID) {
  87.         if (utl_GetDialogEditFieldNum(w) == loginPswdField &&
  88.             theItem != selectAllCmd) {
  89.             glob_FilterPswdEditCmd(w, theItem, Pswd);
  90.             return true;
  91.         } else if (theItem == pasteCmd && !glob_FilterPaste()) {
  92.             return true;
  93.         }
  94.     }
  95.     return oop_DoCommand(w, theMenu, theItem);
  96. }
  97.  
  98. /*_____________________________________________________________________
  99.  
  100.     DrawPopUp - Draw Popup Menu.
  101.     
  102.     Entry:    theWindow = pointer to dialog window.
  103.                 itemNo = item number of popup menu user item.
  104. _____________________________________________________________________*/
  105.  
  106. static pascal void DrawPopUp (WindowPtr theWindow, short itemNo)
  107.  
  108. {
  109. #pragma unused (theWindow, itemNo)
  110.  
  111.     if (!SiteMenu) return;
  112.     glob_DrawSitePopup(&PopupRect, CurSel);
  113. }
  114.  
  115. /*_____________________________________________________________________
  116.  
  117.     login_DoDialog - Do Login Dialog.
  118.     
  119.     Entry:    server = initial value for server field.
  120.                 user = initial value for user field.
  121.                 pswd = initial value for password field.
  122.     
  123.     Exit:        function result = true if canceled by user.
  124.                 server = server name.
  125.                 user = login alias or name.
  126.                 pswd = password.
  127. _____________________________________________________________________*/
  128.  
  129. Boolean login_DoDialog (Str255 server, Str255 user, Str255 pswd)
  130.  
  131. {
  132.     short            itemType;    /* item type */
  133.     Handle        item;            /* handle to item */
  134.     Rect            box;            /* item rectangle */
  135.     short            itemHit;        /* item hit */
  136.     short            menuWidth;    /* menu width */
  137.     Str255        bullets;        /* string of bullets for initial password field */
  138.     short            newSel;        /* new index of server in menu */
  139.     Str255        newDomain;    /* new server domain name */
  140.  
  141.     ShowCursor();
  142.     Window = wstm_Restore(true, loginDlogID, nil, &LoginState);
  143.     utl_SetDialogText(Window, loginServField, server);
  144.     utl_SetDialogText(Window, loginUserField, user);
  145.     SelIText(Window, loginUserField, 0, 0x7fff);
  146.     utl_CopyPString(Pswd, pswd);
  147.     *bullets = *pswd;
  148.     memset(bullets+1, '•', *pswd);
  149.     utl_SetDialogText(Window, loginPswdField, bullets);
  150.     GetDItem(Window, loginPopup, &itemType, &item, &PopupRect);
  151.     if (SiteMenu) {
  152.         CalcMenuSize(SiteMenu);
  153.         menuWidth = (**SiteMenu).menuWidth;
  154.         PopupRect.left = PopupRect.right - menuWidth;
  155.         CurSel = glob_GetSiteIndex(DefaultServer);
  156.     }
  157.     SetDItem(Window, loginPopup, itemType, (Handle)DrawPopUp, &PopupRect);
  158.     SetPort(Window);
  159.     TextFont(0);
  160.     TextSize(12);
  161.     oop_NewDialog(Window, loginModal, nil, &dispatch, true, 
  162.         loginLogin, loginCancel);
  163.     ShowWindow(Window);
  164.     while (true) {
  165.         oop_ClearWindItemHit(Window);
  166.         while (!(itemHit = oop_GetWindItemHit(Window)) && !Done) 
  167.             oop_DoEvent(nil, everyEvent, 
  168.                 oop_InForeground() ? shortSleep : longSleep, nil);
  169.         if (Done) itemHit = loginCancel;
  170.         if (itemHit == loginCancel) break;
  171.         if (itemHit == loginPopup && SiteMenu) {
  172.             glob_PopupSiteMenu(&PopupRect, CurSel, &newSel, &newDomain);
  173.             if (newSel == -1) continue;
  174.             CurSel = newSel;
  175.             utl_SetDialogText(Window, loginServField, newDomain);
  176.             if (((DialogPeek)Window)->editField == loginServField-1)
  177.                 SelIText(Window, loginServField, 0, 0x7fff);
  178.             InvalRect(&box);
  179.             continue;
  180.         }
  181.         break;
  182.     }
  183.     if (itemHit == loginLogin) {
  184.         utl_GetDialogText(Window, loginServField, server);
  185.         utl_GetDialogText(Window, loginUserField, user);
  186.         utl_CopyPString(pswd, Pswd);
  187.     }
  188.     wstm_Save(Window, &LoginState);
  189.     oop_DoClose(Window);
  190.     InitCursor();
  191.     return itemHit == loginCancel;
  192. }
  193.